/*
 * @Descripttion: 
 * @version: 
 * @Author: wtzhang
 * @Date: 2021-05-14 11:02:01
 * @LastEditors: wtzhang
 * @LastEditTime: 2021-05-18 15:28:19
 */
/**
 * student.js
 * 数据操作文件模块
 * 职责：只负责文件数据处理，不关心业务
 */

const fs = require('fs')

const dbPath = './db.json'

// 获取所有学生列表
exports.find = function (callback) {
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    callback(null, JSON.parse(data).students)
  })
}
// 添加保存学生
exports.save = function (student, callback) {
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    let studentArr = JSON.parse(data).students
    student.id = studentArr.length > 0 ? ((studentArr[studentArr.length - 1].id) - 0 + 1) : 0
    studentArr.push(student)
    // console.log('studentArr:', studentArr);
    let fileData = JSON.stringify({
      students: studentArr
    })
    // 写入文件
    fs.writeFile(dbPath, fileData, function (err, data) {
      if (err) {
        return callback(err)
      }
      callback(null)
    })

  })
}
// 更新学生信息
exports.findById = function (id, callback) {
  // 获取当前所有存储数据
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    let students = JSON.parse(data).students
    // console.log(students);
    let cur_student = students.find(item => {
      return parseInt(item.id) == parseInt(id)
    })
    // console.log(cur_student);
    callback(null, cur_student)
  })
}
exports.update = function (student, callback) {
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    let students = JSON.parse(data).students
    // console.log(students);
    // 修改谁先把谁找出来
    let old_student = students.find(item => {
      return item.id == student.id
    })
    // console.log(old_student);
    // 浅拷贝对象，更改原来数据
    for (let key in student) {
      old_student[key] = student[key]
    }
    // 把对象数据转换为字符串数据
    let fileData = JSON.stringify({
      students: students
    })
    // console.log(fileData);
    // 写入文件
    fs.writeFile(dbPath, fileData, function (err, data) {
      if (err) {
        return callback(err)
      }
      callback(null)
    })
  })
}
// 删除学生信息
exports.delete = function (id, callback) {
  // 获取当前数据文件中的所有数据
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    let students = JSON.parse(data).students
    // console.log(students);
    // 找到与用户要删除 id 所对应的数据的 下标
    let deleteId = students.findIndex(item => {
      return item.id == id
    })
    // console.log(deleteId);
    // // 删除操作
    students.splice(deleteId, 1)
    // 把对象数据转换为字符串数据
    let fileData = JSON.stringify({
      students: students
    })
    fs.writeFile(dbPath, fileData, function (err, data) {
      if (err) {
        return callback(err)
      }
    })
  })
}